﻿using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;

namespace EA_therapy
{
    /*
    患者信息类

    */
    public partial class Patient : Form
    {
        bool flag = true;
        Panel father;
        public Patient(Panel _father)
        {
            InitializeComponent();
            father = _father;
            this.dataGridView1.DataSource = EADB.GetPatiet();
            this.dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
        }

        /*
        方法：返回前页
        形参：按钮控件
        返回值：
        备注：
        */

        /*
        方法：检查文本信息是否完整
        形参：无
        返回值：bool，可执行下一步返回true，否则返回false
        备注：可留空属性未填时用“-”代替
        */
        private bool isOK()
        {
            //检查*身份证号
            if (ID.Text.Length != 18)
            {
                MessageBox.Show("输入身份证号不合法！");
                return false;
            }
            //检查*姓名
            if (name.Text.Length == 0)
            {
                MessageBox.Show("请输入姓名！");
                return false;
            }
            //检查*性别
            if (sex.Text.Length == 0)
            {
                MessageBox.Show("请输入性别！");
                return false;
            }
            //补全未填信息
            if (occupation.Text.Length == 0)
                occupation.Text = "-";
            if (age.Text.Length == 0)
                age.Text = "-";
            if (height.Text.Length == 0)
                height.Text = "-";
            if (weight.Text.Length == 0)
                weight.Text = "-";
            if (phone.Text.Length == 0)
                phone.Text = "-";
            if (address.Text.Length == 0)
                address.Text = "-";
            return true;
        }

        /*
        方法：确认信息后进入下一页
        形参：按钮控件
        返回值：
        备注：首先检索所有信息是否填写完整，将病人ID存放入全局变量Global中供后续功能使用
        */
        private void Enter_Click(object sender, EventArgs e)
        {
            if (isOK())
            {
                Global.ID = this.ID.Text;
                //若该患者在数据库中不存在，新建患者信息条目
                if (!Global.pat_exist)
                {
                    string info = DateTime.Now.ToString("yyyy/MM/dd-HH:mm:ss") + "','";//患者条目创建时间，格式如下(2015-11-10-13-55-48)
                    info += name.Text + "','";
                    info += ID.Text + "','";
                    info += sex.Text + "','";
                    info += age.Text + "','";
                    info += occupation.Text + "','";
                    info += height.Text + "','";
                    info += weight.Text + "','";
                    info += phone.Text + "','";
                    info += address.Text;
                    EADB.AddPatient(info);
                     this.father.Controls.Clear();
                    Disease newform = new Disease(father);
            newform.FormBorderStyle = FormBorderStyle.None;
            newform.TopLevel = false;
            newform.ControlBox = false;
            newform.Dock = DockStyle.Fill;
            this.father.Controls.Add(newform);
            newform.Show();
            this.Close();
                }
                //若病人已经存在，则不添加患者信息条目，直接进入选择界面(旧治疗/新治疗)
                else
                {
                    this.father.Controls.Clear();
                    Disease newform = new Disease(father);
                    newform.FormBorderStyle = FormBorderStyle.None;
                    newform.TopLevel = false;
                    newform.ControlBox = false;
                    newform.Dock = DockStyle.Fill;
                    this.father.Controls.Add(newform);
                    newform.Show();
                    this.Close();
                }
            }
        }

        /*
        方法：ID文本框输入响应
        形参：
        返回值：
        备注：当ID.Text.Length==18时，自动补全age文本框信息，并使用此ID去检索数据库
              当该ID条目存在于数据库时，自动补全其余该条目属性
        */
        private void ID_TextChanged(object sender, EventArgs e)
        {
            Global.pat_exist = false;//当文本发生改动时，设置该患者信息条目不存在，取消【删除】【修改】按钮
            delete.Enabled = false;
            alter.Enabled = false;
            if (ID.Text.Length == 18)
            {
                age.Text = (DateTime.Now.Year - Int32.Parse(ID.Text.Substring(6, 4))).ToString();
                DataTable dt = EADB.GetPatientbyID(ID.Text);
                //该患者存在，补全未填属性，激活【删除】【修改】按钮
                if (dt.Rows.Count > 0)
                {
                    delete.Enabled = true;
                    alter.Enabled = true;
                    Global.pat_exist = true;//设置该患者信息条目存在
                    name.Text = dt.Rows[0][1].ToString();
                    if (dt.Rows[0][3].ToString().Equals("男"))
                        sex.SelectedIndex = 0;
                    else
                        sex.SelectedIndex = 1;
                    occupation.Text = dt.Rows[0][5].ToString();
                    height.Text = dt.Rows[0][6].ToString();
                    weight.Text = dt.Rows[0][7].ToString();
                    phone.Text = dt.Rows[0][8].ToString();
                    address.Text = dt.Rows[0][9].ToString();
                }
            }
        }

        /*
        方法：重置所有信息
        形参：按钮控件
        返回值：
        备注：
        */
        private void button1_Click(object sender, EventArgs e)
        {
            name.Text = "";
            sex.Text = "";
            occupation.Text = "";
            age.Text = "";
            height.Text = "";
            weight.Text = "";
            phone.Text = "";
            address.Text = "";
            ID.Text = "";
        }

        /*
        方法：删除该患者信息条目
        形参：按钮控件
        返回值：Message
        备注：
        */
        private void delete_Click(object sender, EventArgs e)
        {
            if (EADB.DeletePatient(this.ID.Text))
                MessageBox.Show("删除成功！");
        }

        /*
        方法：更新患者信息条目
        形参：按钮控件
        返回值：
        备注：
        */
        private void alter_Click(object sender, EventArgs e)
        {
            string info = "";
            info += "姓名='" + name.Text + "',";
            info += "性别='" + sex.Text + "',";
            info += "年龄='" + age.Text + "',";
            info += "职业='" + occupation.Text + "',";
            info += "身高='" + height.Text + "',";
            info += "体重='" + weight.Text + "',";
            info += "联系电话='" + phone.Text + "',";
            info += "家庭地址='" + address.Text + "'";
            EADB.UpdatePatient(info);
        }

        /*
        方法：标签栏换页响应
        形参：
        返回值：
        备注：读取所有患者信息条目
        */
        private void page_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (((TabControl)sender).SelectedIndex == 0)
            {
                this.dataGridView1.DataSource = EADB.GetPatiet();
                this.dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
                //MessageBox.Show("!");
            }
            else
            {
                Global.ID = "";
                cute.Visible = false;
                cute.Enabled = false;
                reset.Enabled = false;
                flag = true;
            }
        }


        /*
        方法：
        形参：
        返回值：
        备注：
        */
        private void cute_Click(object sender, EventArgs e)
        {
            this.father.Controls.Clear();
            Disease newform = new Disease(father);
            newform.FormBorderStyle = FormBorderStyle.None;
            newform.TopLevel = false;
            newform.ControlBox = false;
            newform.Dock = DockStyle.Fill;
            this.father.Controls.Add(newform);
            newform.Show();
            this.Close();
        }

        /*
        方法：返回
        形参：
        返回值：
        备注：
        */
        private void reset_Click(object sender, EventArgs e)
        {
            Global.ID = "";
            this.dataGridView1.DataSource = EADB.GetPatiet();
            this.dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
            cute.Visible = false;
            cute.Enabled = false;
            reset.Enabled = false;
            flag = true;
        }

        /*
        方法：age文本框输入控制
        形参：
        返回值：
        备注：只能输入[0,9]
        */
        private void age_KeyPress(object sender, KeyPressEventArgs e)
        {
            //判断按键是不是要输入的类型。
            if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8)
                e.Handled = true;
        }

        /*
        方法：phone文本框输入控制
        形参：
        返回值：
        备注：只能输入[0,9]
        */
        private void phone_KeyPress(object sender, KeyPressEventArgs e)    //only number
        {
            if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8)
                e.Handled = true;
        }

        /*
        方法：height、weight文本框输入控制
        形参：
        返回值：
        备注：只能输入[0,9] or '.'
        */
        private void hw_KeyPress(object sender, KeyPressEventArgs e)
        {
            //判断按键是不是要输入的类型。
            if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8 && (int)e.KeyChar != 46)
                e.Handled = true;
            //小数点的处理。
            if ((int)e.KeyChar == 46)                           //小数点
            {
                if (weight.Text.Length <= 0)
                    e.Handled = true;   //小数点不能在第一位
                else                                             //处理不规则的小数点
                {
                    float f;
                    float oldf;
                    bool b1 = false, b2 = false;
                    b1 = float.TryParse(weight.Text, out oldf);
                    b2 = float.TryParse(weight.Text + e.KeyChar.ToString(), out f);
                    if (b2 == false)
                    {
                        if (b1 == true)
                            e.Handled = true;
                        else
                            e.Handled = false;
                    }
                }
            }
        }

        /*
        方法：ID文本框输入限制
        形参：
        返回值：
        备注：1-17位只能输入[0,9]，18位可输入'X' or 'x'
        */
        private void ID_KeyPress(object sender, KeyPressEventArgs e)
        {
            //MessageBox.Show(ID.Text.Length.ToString());
            if (ID.Text.Length < 17)
            {
                if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8)
                    e.Handled = true;
            }
            if (ID.Text.Length == 17)
            {
                if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8 && (int)e.KeyChar != 88 && (int)e.KeyChar != 120)
                    e.Handled = true;
            }
        }

        /*
        方法：Search响应
        形参：按钮控件
        返回值：
        备注：
        */
        private void button2_Click(object sender, EventArgs e)
        {
            if (search.Text.Length == 18)
                dataGridView1.DataSource = EADB.GetPatientbyID(search.Text);
            else
                dataGridView1.DataSource = EADB.GetPatientbyName(search.Text);
        }

        /*
        方法：Search文本框回车响应
        形参：
        返回值：
        备注：
        */
        private void search_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (search.Text.Length == 18)
                    dataGridView1.DataSource = EADB.GetPatientbyID(search.Text);
                else
                    dataGridView1.DataSource = EADB.GetPatientbyName(search.Text);
            }
        }

        /*
方法：dataGridView双击响应
形参：
返回值：
备注：使用双击患者的身份证号查询所有治疗单信息并显示
*/
        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (flag)
            {
                Global.ID = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
                dataGridView1.DataSource = EADB.GetCute(Global.ID);
                dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
                cute.Visible = true;
                cute.Enabled = true;
                reset.Enabled = true;
                flag = false;
            }
        }
    }
}